06. Pull 与 Fetch

Pull 与 Fetch

git fetch 用于从远程仓库分支检索 commit ,但 不会 在收到这些 commit 之后,自动将本地分支与远程跟踪分支合并。

上面的段落有点密集,你可以多读几遍。

你需要向 git fetch 提供和 git pull 完全相同的信息,也就是说要提供你想获取的远程仓库的简写名及其分支:

$ git fetch origin master

运行 git fetch 后,会发生以下活动:

  • 远程分支上的 commit 会复制到本地仓库
  • 本地跟踪分支(例如, origin/master )移到指向最新的 commit

需要注意的一点是,本地分支完全不会被改变。

你可以将 git fetch 想象成 git pull 它的一半操作,而 git pull 的另一半是合并。

使用 git fetch 而不是 git pull 的一个主要情形是当你的远程分支和本地分支都拥有对方所没有的更改时。在这种情况下,你要获取远程更改,将它们存储到本地分支中,然后手动执行合并。最后,你可以将新的合并 commit 推送会远程仓库。

我们来看看。

L1 - 获取、合并和推送

小结

你可以将 git pull 命令想象成执行两步操作:

  1. 获取远程更改(这会将 commit 添加到远程仓库,并移动跟踪分支指向它们)
  • 将本地分支与跟踪分支合并

git fetch 命令只执行上面的第一步。它只检索 commit 和移动跟踪分支。它 不会 将本地分支与跟踪分支合并。提供给 git pull 的同样信息也要传递给 git fetch

  • 远程仓库的简写名
  • 包含要取回的 commit 的分支
$ git fetch origin master